Estatística Básica

Correlação

Wlademir Prates

Como saber o quanto uma variável anda junto com outra?

  • Para variáveis numéricas, usamos o coeficiente de correlação
    • Indica tanto a direção quanto a força da relação (varia de -1 a 1).

Alguns conceitos básicos …

  • Relação Linear: As variáveis se movem em uma linha reta, ou seja, mudanças em uma variável correspondem a mudanças proporcionais e constantes na outra variável. Ex.: salário e experiência; distância percorrida e tempo.

  • Relação Monotônica: As variáveis se movem na mesma direção, mas não necessariamente de forma proporcional ou constante. Pode ser crescente ou decrescente. À medida que uma variável aumenta, a outra também aumenta (ou diminui) consistentemente, mas não precisa seguir uma linha reta. Ex.: Temperatura e consumo de sorvete; Idade e risco de certas doenças.

Os principais métodos de cálculo para o coeficiente de correlação

  • Pearson
    • Tipo: Linear
    • Medição: Correlação linear entre variáveis contínuas
    • Suposições: Variáveis normalmente distribuídas e relação linear
    • Usar em: variáveis contínuas.
  • Spearman
    • Tipo: Monotônica
    • Medição: Correlação de ranks (ordena, rankeia, compara posições no ranking)
    • Suposições: Variáveis ordinais, intervalares ou de razão; relação monotônica
    • Usar em: muitos empates, dados maiores.
  • Kendall
    • Tipo: Monotônica
    • Medição: Correlação de pares (concordâncias e discordâncias - os pares são iguais? Sim ou não…)
    • Suposições: Variáveis ordinais, intervalares ou de razão; relação monotônica
    • Usar em: pequenas amostras, poucos empates.

Matriz de correlação

Matriz de correlação

library(dplyr)
cor(mtcars) |>  as_tibble()
# A tibble: 11 × 11
      mpg    cyl   disp     hp    drat     wt    qsec     vs      am   gear
    <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl>
 1  1     -0.852 -0.848 -0.776  0.681  -0.868  0.419   0.664  0.600   0.480
 2 -0.852  1      0.902  0.832 -0.700   0.782 -0.591  -0.811 -0.523  -0.493
 3 -0.848  0.902  1      0.791 -0.710   0.888 -0.434  -0.710 -0.591  -0.556
 4 -0.776  0.832  0.791  1     -0.449   0.659 -0.708  -0.723 -0.243  -0.126
 5  0.681 -0.700 -0.710 -0.449  1      -0.712  0.0912  0.440  0.713   0.700
 6 -0.868  0.782  0.888  0.659 -0.712   1     -0.175  -0.555 -0.692  -0.583
 7  0.419 -0.591 -0.434 -0.708  0.0912 -0.175  1       0.745 -0.230  -0.213
 8  0.664 -0.811 -0.710 -0.723  0.440  -0.555  0.745   1      0.168   0.206
 9  0.600 -0.523 -0.591 -0.243  0.713  -0.692 -0.230   0.168  1       0.794
10  0.480 -0.493 -0.556 -0.126  0.700  -0.583 -0.213   0.206  0.794   1    
11 -0.551  0.527  0.395  0.750 -0.0908  0.428 -0.656  -0.570  0.0575  0.274
# ℹ 1 more variable: carb <dbl>

Mantendo apenas uma diagonal

Você pode encontrar também a matriz com apenas uma diagonal.

library(rstatix)
replace_upper_triangle(cor(mtcars), by = NA, diagonal = TRUE) |> as_tibble()
# A tibble: 11 × 12
   rowname    mpg    cyl   disp     hp    drat     wt   qsec     vs      am
   <chr>    <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
 1 mpg      1     NA     NA     NA     NA      NA     NA     NA     NA     
 2 cyl     -0.852  1     NA     NA     NA      NA     NA     NA     NA     
 3 disp    -0.848  0.902  1     NA     NA      NA     NA     NA     NA     
 4 hp      -0.776  0.832  0.791  1     NA      NA     NA     NA     NA     
 5 drat     0.681 -0.700 -0.710 -0.449  1      NA     NA     NA     NA     
 6 wt      -0.868  0.782  0.888  0.659 -0.712   1     NA     NA     NA     
 7 qsec     0.419 -0.591 -0.434 -0.708  0.0912 -0.175  1     NA     NA     
 8 vs       0.664 -0.811 -0.710 -0.723  0.440  -0.555  0.745  1     NA     
 9 am       0.600 -0.523 -0.591 -0.243  0.713  -0.692 -0.230  0.168  1     
10 gear     0.480 -0.493 -0.556 -0.126  0.700  -0.583 -0.213  0.206  0.794 
11 carb    -0.551  0.527  0.395  0.750 -0.0908  0.428 -0.656 -0.570  0.0575
# ℹ 2 more variables: gear <dbl>, carb <dbl>

Mapa de calor (heatmap) - Código

library(echarts4r)
cor_chart <- cor(mtcars) |>
  e_charts() |>
  e_correlations(
    order = "hclust",
    visual_map = FALSE
  ) |>
  e_visual_map(
    min = -1,
    max = 1
  ) |>
  e_tooltip()

Mapa de calor (heatmap)

Comecei com a matriz de correlação, mas o scatterplot é com certeza o gráfico mais usado para correlação

Scatterplot para variáveis contínuas

mtcars |>
  e_charts(mpg) |>
  e_scatter(wt, qsec)

Exemplo com dados mais próximos da realidade

Correlação com dados de RH - Código

library(dplyr)
library(readr)
dados_rh <- read_csv(
  "https://raw.githubusercontent.com/wrprates/open-data/master/ibm_hr_emplyee_attrition.csv"
)
dados_rh_num <- dados_rh |>
  select_if(is.numeric) |>
  select(
    -c(
      Education,
      EmployeeNumber,
      EmployeeCount,
      JobLevel,
      StockOptionLevel,
      WorkLifeBalance,
      StandardHours
    )
  )
correl_dados_rh_num <- dados_rh_num |> cor(method = "spearman")

Matriz de correlação de RH

Matriz de correlação de RH - Código

correl_dados_rh_num |> as_tibble()
# A tibble: 19 × 19
          Age DailyRate DistanceFromHome EnvironmentSatisfaction HourlyRate
        <dbl>     <dbl>            <dbl>                   <dbl>      <dbl>
 1  1          0.00729          -0.0193                  0.00982   0.0289  
 2  0.00729    1                -0.00275                 0.0190    0.0235  
 3 -0.0193    -0.00275           1                      -0.0104    0.0204  
 4  0.00982    0.0190           -0.0104                  1        -0.0524  
 5  0.0289     0.0235            0.0204                 -0.0524    1       
 6  0.0345     0.0425            0.0344                 -0.0153    0.0439  
 7 -0.00518    0.0278           -0.0131                 -0.00299  -0.0683  
 8  0.472      0.0163            0.00251                -0.0152   -0.0198  
 9  0.0175    -0.0324            0.0396                  0.0375   -0.0149  
10  0.353      0.0365           -0.00959                 0.00615   0.0192  
11  0.00771    0.0251            0.0297                 -0.0305   -0.00988 
12  0.0000934  0.000624          0.0113                 -0.0292   -0.00218 
13  0.0461     0.00968           0.00585                 0.00535   0.000259
14  0.657      0.0210           -0.00291                -0.0139   -0.0121  
15  0.000316  -0.0113           -0.0248                 -0.0117    0.000292
16  0.252     -0.00978           0.0105                  0.00842  -0.0290  
17  0.198      0.00721           0.0137                  0.0201   -0.0340  
18  0.174     -0.0376           -0.00469                 0.0261   -0.0524  
19  0.195     -0.00472           0.00445                -0.00173  -0.0138  
# ℹ 14 more variables: JobInvolvement <dbl>, JobSatisfaction <dbl>,
#   MonthlyIncome <dbl>, MonthlyRate <dbl>, NumCompaniesWorked <dbl>,
#   PercentSalaryHike <dbl>, PerformanceRating <dbl>,
#   RelationshipSatisfaction <dbl>, TotalWorkingYears <dbl>,
#   TrainingTimesLastYear <dbl>, YearsAtCompany <dbl>,
#   YearsInCurrentRole <dbl>, YearsSinceLastPromotion <dbl>,
#   YearsWithCurrManager <dbl>

scatterplot

Desafio

Obtenha alguma tabela de dados, de preferência algo que você usa em seu dia a dia no trabalho, e crie um gráfico do estilo heatmap interativo usando o pacote echarts4r com a matriz de correlação para as variáveis numéricas. Crie um pequeno relatório interativo em html usando o pacote quarto, onde você deverá incluir o gráfico do heatmap e uma interpretação acerca das correlações encontradas. Para o cálculo da correlação escolha entre o método de Pearson ou de Spearman e brevemente justifique sua decisão no relatório.